let num:number = 10
let flag:boolean = true

// 声明数组的方法 类型 + 方括号」表示法

let numArr:number[] = [1,2,3,4,5,6,7]
let flagArr:boolean[] = [true,false]

flagArr.push(true)
flagArr.push(false)

// flagArr.push('a'== 'a1') ///只能写false 或者true 不能写表达式

// 数组泛型 Array<number>

let arr:Array<number> = [1,2,3,4,5]
let arr1:Array<string> = ['1']


// 元组  类型要一一对应

// 访问已知索引的值 可以获取
let arr2:[string,number,boolean] = ['11',1,true]

console.log(arr2[0]);
arr2.push(10)
// 访问未知索引的值，获取不到
// console.log(arr2[3]);



// let str = 'hello' 就相当于  let str:string = 'hello'

// let str1 = 10
// str1 = ''

let str2   //第一次声明没有初始化的时候，会被推论成any类型,如何初始化的时候给变量赋值，会被推论成第一次赋值的类型
// let str2  就相当于 let str:any  
str2 = '111'
str2 = 10
str2 = undefined
str2 = true


// 联合类型
// 联合类型就是用| 分割我们的每一个类型
let numStr:string|number|boolean|undefined
numStr = 1
numStr = 'hhh'
numStr =true
numStr = undefined


// something: string | number  给函数的参数只能类型 string 或者 number
// :number 函数返回值的类型
function getLength(something: string | number): string {
    return something.toString();
}
getLength(12)














